# coding:utf-8

# 定义函数，输出胜利的棋盘
def msg():
    print('\033[1;37;41m------------------------')
    print('  1 2 3 4 5 6 7 8 9 10')
    for i in range(len(checkerboard)):  # 外层控制打印输出的行数
        print(chr(i + ord('A')) + ' ', end='')
        for j in range(len(checkerboard[i])):  # 内层控制的是每行打印的个数
            print(checkerboard[i][j] + ' ', end='')
        # 内层循环执行完，一行执行结束，换行 ,空的print()语句在这里的作用就是执行换行
        print()
    print('----------------------------------------\033[0m')
    # 在棋盘的下方，输出赢家
    if flag_num==1:
        print('\033[32m*棋胜利!***\033[0m')
    else:
        print('\033[32mo棋胜利!***\033[0m')

# 语法格式 \033[显示方式;前景色;背景色m        结构束  \033[显示方式m
print('\033[1;37;41m--------------简易五子棋-----------\033[0m')
finish=False # 游戏是否结束
flag_num=1 # 当前下棋者的标记
flag_char='*' # 当前下棋者下的棋子
x=0 # 当前棋子的x轴坐标
y=0 # 当前棋子的y轴坐标
# 初始化棋盘
checkerboard=[] # 是一个一维列表
for i in range(10):
    checkerboard.append([])
    for j in range(10):
        checkerboard[i].append('-')
while not finish: # finish的值为True时程序结束
    # 打印棋盘
    print('\033[1;30;46m--------------------------------')
    print('  1 2 3 4 5 6 7 8 9 10')
    for i in range(len(checkerboard)): # 外层控制打印输出的行数
        print(chr(i+ord('A'))+' ',end='')
        for j in range(len(checkerboard[i])): # 内层控制的是每行打印的个数
            print(checkerboard[i][j]+' ',end='')
        #内层循环执行完，一行执行结束，换行 ,空的print()语句在这里的作用就是执行换行
        print()
    print('----------------------------------------\033[0m')
    # 判断当前下棋者，如果flag_num=1 表示是  * 否则是o下
    if flag_num==1:
        flag_char='*'
        print('\033[1;37;45m请*输入棋子的坐标(A1):\033[0m',end='') # 这个输出实际上是为下面input输入提供的提示文本
    else:
        flag_char='o'
        print('\033[1;30;42m请o输入棋子的坐标(H2):\033[0m',end='')
    # 记录棋子的坐标
    s=input() # input()中为什么没有写提示文本？46或49行，就是提示文本
    ch=s[0] # 将输入的字母进行提取
    x=ord(ch)-65
    if len(s)==3: #说明下到的了最后一个位置B10
        y=int(s[1]+s[2])-1 #为什么要执行-1操作呢？因为索引从0开始
    else:
        y=int(s[1])-1 # A2 s[1]获取出2

    # 判断x,y的坐标是否在棋盘的范围之内
    if x<0 or x>9 or y<0 or y>9: # 是不正确的范围
        print('\033[1;31m***您输入的坐标有误，请重新输入****!\033[0m')
        continue
    #判断指定坐标位置是否有棋子
    if checkerboard[x][y]=='-':
        if flag_num==1:
            checkerboard[x][y]='*'
        else:
            checkerboard[x][y]='o'
    else:
        print('\033[31m****您输入的位置已经有其他棋子，请重新输入****\033[0m')
        continue

    # 判断棋子的左侧 ，修改的是y坐标
    if y-4>=0: # y 是当前位置，与左侧4个棋子的符号相同，就是五子连珠
        if (checkerboard[x][y-1]==flag_char and
            checkerboard[x][y-2]==flag_char and
            checkerboard[x][y-3]==flag_char and
            checkerboard[x][y-4]==flag_char):
            finish=True
            msg() # 调用胜利者棋盘

    if y+4<=9: # 判断当前棋子的右侧
        if (checkerboard[x][y+1]==flag_char and
            checkerboard[x][y+2]==flag_char and
            checkerboard[x][y+3]==flag_char and
            checkerboard[x][y+4]==flag_char):
            finish=True
            msg() # 调用胜利者棋盘

    # 判断当前棋子的上方
    if x-4>=0:
        if (checkerboard[x-1][y]==flag_char and
            checkerboard[x-2][y]==flag_char and
            checkerboard[x-3][y]==flag_char and
            checkerboard[x-4][y]==flag_char ):
            finish=True
            msg()
    # 判断当前棋子的下方
    if x+4<=9:
        if (checkerboard[x+1][y]==flag_char and
            checkerboard[x+2][y]==flag_char and
            checkerboard[x+3][y]==flag_char and
            checkerboard[x+4][y]==flag_char ):
            finish=True
            msg()
    # 判断左上的棋子
    if x-4>=0 and y-4>=0:
        if (checkerboard[x-1][y-1]==flag_char and
            checkerboard[x-2][y-2]==flag_char and
            checkerboard[x-3][y-3]==flag_char and
            checkerboard[x-4][y-4]==flag_char):
            finish=True
            msg()

    # 判断右上的棋子
    if x-4>=0 and y+4<=9:
        if (checkerboard[x-1][y+1]==flag_char and
            checkerboard[x-2][y+2]==flag_char and
            checkerboard[x-3][y+3]==flag_char and
            checkerboard[x-4][y-4]==flag_char):
            finish=True
            msg()
    # 判断左下的棋子
    if x+4<=9 and y-4>=0:
        if(checkerboard[x+1][y-1]==flag_char and
            checkerboard[x+2][y-2]==flag_char and
            checkerboard[x+3][y-3]==flag_char and
            checkerboard[x+4][y-4]==flag_char):
            finish=True
            msg()
    # 判断右下的棋子
    if x+4<=9 and y+4<=9:
        if (checkerboard[x+1][y+1]==flag_char and
            checkerboard[x+2][y+2]==flag_char and
            checkerboard[x+3][y+3]==flag_char and
            checkerboard[x+4][y+4]==flag_char):
            finish=True
            msg()

    # 修改flag_num的值
    flag_num*=-1 # 使用正数，负数去切换下棋者